Fork me on GitHub

Spring源码 - 事务概述

注意:所有文章除特别说明外,转载请注明出处.

Spring源码 - 事务概述

事务首先是一系列操作组成的工作单元,该工作单元内的操作时不可分割的,要么所有操作都做,要么所有操作都不做,这就是事务。

ACID

并发操作

在并发操作过程中会出现如下问题:

1.丢失更新:两个事务更新同一行数据,最后一个事务的更新会覆盖第一个事务的更新。

2.脏读:一个事务看到另一个事务未提交的更新数据。

3.不可重复读:在同一事务中,多次读取同一个数据却返回不同的结果。其它事务更改这些数据。

4.幻读:一个事务在执行过程中读取到了另一个事务已提交的插入数据;即在第一个事务开始时读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样。

为了解决上面的问题,需要通过数据库隔离级别来解决。

1.未提交读:最低级别,一个事务能够读取到别的事务未提交的更新数据,所以这是不安全的,可能出现丢失更新、脏读、不可重复读、幻读。

2.提交读:一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,不可能出现丢失更新、脏读,但可能出现不可重复读、幻读。

3.可重复读:保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响,不可能出现丢失更新、脏读、不可重复读,但可能出现幻读。

4.序列化:最高隔离级别,不允许事务并发执行,而必须串行化执行,最安全,不可能出现更新、脏读、不可重复读、幻读。

注意:隔离级别越高,数据库事务并发执行性能越差,能处理的操作就越少。在实际项目中采用 提交读 的事务隔离级别,其能够避免丢失更新和脏度,尽管不能避免 不可重复读和幻读,但是可以在可能出现的场合使用 悲观锁和乐观锁 来解决这些问题。

Spring 事务管理

Spring 支持声明式事务和编程式事务类型。特性:Spring所有的事务管理策略类都继承自:org.springframework.transaction.PlatformTransactionManager接口。

本文标题:Spring源码 - 事务概述

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:01:59

原始链接:http://bangjinhu.github.io/undefined/Spring源码 - 事务概述/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.